home *** CD-ROM | disk | FTP | other *** search
- package engine.dynamicObjects
- {
- import copy.CopyBank;
- import engine.BitmapLibrary;
- import engine.Engine;
- import engine.WorldScene;
- import flash.display.BitmapData;
- import flash.events.KeyboardEvent;
- import flash.ui.Keyboard;
-
- public class Plane extends DynamicObject
- {
-
-
- private var _enabled:Boolean = true;
-
- private var _pitchInput:Number = 0;
-
- private var _newBombTimer:Number = 0;
-
- private var _pitchAccel:Number = 0;
-
- private var _tempDamage:Number = 0;
-
- private var _ink:Number = 0;
-
- private var _pitch:Number = 0;
-
- private var _roll:Number = 0;
-
- private var _listenersSet:Boolean = false;
-
- private var _trackedOutOfFuel:Boolean = false;
-
- private var _damageProtectionTimer:Number = 0;
-
- private var _pitchVel:Number = 0;
-
- private var _fuel:Number = 100;
-
- private var _bankOffset:Number = 0;
-
- private var _deathSpiral:Number = 0;
-
- private var _life:Number = 100;
-
- private var _vel:Number = 13;
-
- private var _cFrame:Number = 1;
-
- public function Plane()
- {
- _enabled = true;
- _listenersSet = false;
- _cFrame = 1;
- _pitchVel = 0;
- _pitchAccel = 0;
- _pitchInput = 0;
- _pitch = 0;
- _roll = 0;
- _ink = 0;
- _damageProtectionTimer = 0;
- _fuel = 100;
- _trackedOutOfFuel = false;
- _tempDamage = 0;
- _life = 100;
- _bankOffset = 0;
- _deathSpiral = 0;
- _newBombTimer = 0;
- _vel = 13;
- _bmdArray = BitmapLibrary.Clips.DYN_Plane3D;
- super(_bmdArray[0]);
- _animationMethod = ANIM_METHODS.Arbitrary;
- _drawMethod = DMETHOD.Slow;
- _lockScale = true;
- _persistent = true;
- s = 1.45;
- z = 2.5;
- }
-
- public function init() : *
- {
- trace("Plane.init()");
- if(!_listenersSet)
- {
- setInputListeners();
- _listenersSet = true;
- }
- _trackedOutOfFuel = false;
- Main.Instance.startPropeller();
- _enabled = true;
- _damageProtectionTimer = 0;
- _deathSpiral = 0;
- _newBombTimer = 0;
- r = 0;
- _pitch = 0;
- _pitchVel = 0;
- _pitchAccel = 0;
- _pitchInput = 0;
- _deathSpiral = 0;
- _ink = 0;
- _tempDamage = 0;
- _life = 100;
- _fuel = 100;
- _enabled = true;
- vis = true;
- x = WorldScene.Instance.MissionDetails.StartLoc.x;
- y = WorldScene.Instance.MissionDetails.StartLoc.y;
- }
-
- public function get Life() : Number
- {
- return _life;
- }
-
- public function deflect() : *
- {
- _pitch += Math.PI;
- }
-
- private function dropBomb() : *
- {
- WorldScene.Instance.dropBomb();
- }
-
- public function deflectUp() : *
- {
- _pitch = -Math.PI / 2;
- }
-
- override public function fStep() : *
- {
- var tFrame:Number = NaN;
- var bFlip:Boolean = false;
- var id:* = undefined;
- super.fStep();
- --_ink;
- --_damageProtectionTimer;
- if(_enabled)
- {
- _fuel -= 0.05;
- Engine.Instance.Fuel = _fuel;
- if(_fuel < 0)
- {
- --_life;
- }
- --_newBombTimer;
- if(_pitchInput > 0)
- {
- _pitchAccel += 0.0012;
- if(_pitchAccel > 0.18)
- {
- _pitchAccel = 0.18;
- }
- }
- if(_pitchInput < 0)
- {
- _pitchAccel -= 0.0012;
- if(_pitchAccel < -0.18)
- {
- _pitchAccel = -0.18;
- }
- }
- if(_pitchInput == 0)
- {
- _pitchAccel = 0;
- _pitchVel *= 0.9;
- }
- _tempDamage *= 0.98;
- if(_tempDamage > 1)
- {
- if(Math.random() * _tempDamage > 1)
- {
- _pitchVel += (Math.random() * _tempDamage - _tempDamage / 2) * 0.1;
- _pitchAccel = (Math.random() * _tempDamage - _tempDamage / 2) * 0.05;
- }
- }
- if(_life > 0)
- {
- if(_ink > 0)
- {
- _pitchVel += _pitchAccel * 0.25;
- if(Math.random() < 0.2)
- {
- id = new InkDrop();
- WorldScene.Instance.createFX(this,id);
- id.vx = vx * 0.6;
- }
- }
- else
- {
- _pitchVel += _pitchAccel;
- }
- if(_pitchVel > 0.08)
- {
- _pitchVel = 0.08;
- }
- if(_pitchVel < -0.08)
- {
- _pitchVel = -0.08;
- }
- if(y < -50)
- {
- _pitch = Math.PI / 4;
- }
- if(x < -50)
- {
- _pitch = 0;
- }
- if(x > 10080)
- {
- _pitch = -Math.PI;
- }
- _pitch += _pitchVel;
- if(_pitch < 0)
- {
- _pitch = Math.PI * 2 + _pitch;
- }
- if(_pitch > Math.PI * 2)
- {
- _pitch -= Math.PI * 2;
- }
- vx = _vel * Math.cos(_pitch);
- vy = _vel * Math.sin(_pitch);
- r = _pitch;
- bFlip = false;
- if(r > Math.PI / 2 && r < Math.PI * 2 - Math.PI / 2)
- {
- bFlip = true;
- }
- if(bFlip)
- {
- ++_bankOffset;
- if(_bankOffset >= 25)
- {
- _bankOffset = 25;
- }
- }
- else
- {
- --_bankOffset;
- if(_bankOffset <= 0)
- {
- _bankOffset = 0;
- }
- }
- }
- if(y > 1300)
- {
- if(_life > 0)
- {
- if(Math.random() > 0.5)
- {
- Engine.Instance.setPopupMessage(CopyBank.Instance.CrashTaunt);
- }
- damage(30);
- WorldScene.Instance.generatePlaneExplosion(this);
- _pitch = Math.PI / -2;
- Main.Instance.playSound("hit");
- }
- else
- {
- Engine.Instance.setPopupMessage(CopyBank.Instance.PlaneDead);
- vx = 0;
- vy = 0;
- _enabled = false;
- WorldScene.Instance.killPlane();
- Main.Instance.playSound("hitGround");
- Main.Instance.stopPropeller();
- WorldScene.Instance.generatePlaneExplosion(this,25);
- }
- }
- if(Life <= 0)
- {
- _tempDamage = 0;
- ++_deathSpiral;
- vy += 0.5;
- r = getRadians(x,y,x + vx,y + vy);
- }
- tFrame = _pitchVel * 85 + _bankOffset + _deathSpiral;
- if(tFrame > 49)
- {
- tFrame -= 49;
- }
- if(tFrame < 1)
- {
- tFrame = 49 + tFrame;
- }
- _cFrame = tFrame;
- _currentFrame = Math.floor(_cFrame);
- }
- else
- {
- vx = 0;
- vy = 0;
- }
- }
-
- public function damage(inDamage:Number) : *
- {
- if(_damageProtectionTimer < 0)
- {
- _life -= inDamage;
- _tempDamage = 1 + inDamage * 0.05;
- if(_life > 0)
- {
- _damageProtectionTimer = inDamage * 1.5;
- }
- else if(_enabled)
- {
- Main.Instance.setDeathPropeller();
- }
- }
- }
-
- public function deflectDown() : *
- {
- _pitch = Math.PI / 2;
- }
-
- private function setInputListeners() : *
- {
- WorldScene.Instance.stage.addEventListener(KeyboardEvent.KEY_DOWN,p_keyDown);
- WorldScene.Instance.stage.addEventListener(KeyboardEvent.KEY_UP,p_keyUp);
- }
-
- public function get TempDamage() : Number
- {
- return _tempDamage;
- }
-
- public function deflectMinor() : *
- {
- if(Math.random() > 0.5)
- {
- _pitch += 0.4;
- }
- else
- {
- _pitch -= 0.4;
- }
- }
-
- public function get Fuel() : Number
- {
- return _fuel;
- }
-
- private function p_keyDown(event:*) : *
- {
- switch(event.keyCode)
- {
- case Keyboard.LEFT:
- _pitchInput = -1.5;
- break;
- case Keyboard.RIGHT:
- _pitchInput = 1.5;
- break;
- case Keyboard.UP:
- _pitchInput = -1.5;
- break;
- case Keyboard.DOWN:
- _pitchInput = 1.5;
- break;
- case Keyboard.SPACE:
- if(_newBombTimer <= 0)
- {
- dropBomb();
- _newBombTimer = 20;
- }
- }
- }
-
- public function inkHit() : *
- {
- _ink = 175;
- }
-
- private function p_keyUp(event:*) : *
- {
- switch(event.keyCode)
- {
- case Keyboard.LEFT:
- _pitchInput = 0;
- break;
- case Keyboard.RIGHT:
- _pitchInput = 0;
- break;
- case Keyboard.UP:
- _pitchInput = 0;
- break;
- case Keyboard.DOWN:
- _pitchInput = 0;
- }
- }
-
- override protected function slowDraw(inBitmap:BitmapData, inCamX:Number, inCamY:Number) : *
- {
- var extraLayerMode:String = null;
- var csx:Number = NaN;
- var csy:Number = NaN;
- var mtx:Number = NaN;
- var mty:Number = NaN;
- super.slowDraw(inBitmap,inCamX,inCamY);
- extraLayerMode = "";
- if(_damageProtectionTimer > 0 && Math.sin(_damageProtectionTimer * 1) > 0)
- {
- extraLayerMode = "add";
- }
- if(_ink > 0)
- {
- extraLayerMode = "multiply";
- }
- if(extraLayerMode != "")
- {
- _matrix.identity();
- csx = s * (z / _scfl) * xflip;
- csy = s * (z / _scfl) * yflip;
- if(r != 0)
- {
- _matrix.translate(-w / 2,-h / 2);
- _matrix.rotate(r);
- _matrix.translate(w / 2,h / 2);
- }
- if(s != 1 || z != 0)
- {
- _matrix.translate(-w / 2,-h / 2);
- _matrix.scale(csx,csy);
- _matrix.translate(w / 2,h / 2);
- }
- if(!lockX)
- {
- mtx = -inCamX * z + (x - w * csx / 2);
- }
- else
- {
- mtx = -inCamX * 1 + (x - w * csx / 2);
- }
- if(!lockY)
- {
- mty = -inCamY * z + (y - h * csy / 2);
- }
- else
- {
- mty = -inCamY * 1 + (y - h * csy / 2);
- }
- _matrix.translate(mtx,mty);
- if(!_bmd)
- {
- trace("### ERROR _bmd is null - _currentFrame: " + _currentFrame);
- }
- inBitmap.draw(_bmd,_matrix,null,extraLayerMode,null,true);
- }
- }
-
- public function get Ink() : Number
- {
- return _ink;
- }
-
- public function addFuel(fuel:Number) : *
- {
- _fuel += fuel;
- if(_fuel > 100)
- {
- _fuel = 100;
- }
- }
- }
- }
-